#pragma once
#ifndef OBR_INTEGRATOR_H
#define OBR_INTEGRATOR_H

#include "Configurable.h"
#include "ProgramEntry.h"
#include "SharedDS/IntegratorData.h"
#include "common.h"

namespace OBR
{
class Integrator : public ProgramEntry
{
public:
    std::shared_ptr<CudaProgram> integrator_program_group;
    uint num_fbos = 1;

public:
    Integrator(std::string cuda_source_path);
    ~Integrator();

    /**
     * @brief get program group of this type
     *
     * @return std::shared_ptr<CudaProgram>
     */
    std::shared_ptr<CudaProgram> getProgram() override;

private:
    void setProgram(std::shared_ptr<CudaProgram> prog) override;
};

} // namespace OBR

#endif
